package com.woniuxy.school.online.repair.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * redis实现阻塞队列
 */
@Component
public class RedisQueueUtil {
    //队列名字
    private static final String QUEUE_KEY = "Queue:regularId:problemId:";

    @Autowired
    private StringRedisTemplate template;

    /**
     * 获取redis队列
     *
     * @param regularId 普通用户ID
     * @return 返回该队列
     */
    public List<String> getRedisQueue(String regularId) {
        return template.opsForList().range(QUEUE_KEY + regularId, 0, -1);
    }

    /**
     * 向队列添加任务
     *
     * @param val       要添加的任务
     * @param regularId 普通用户ID
     * @param problemId 问题ID
     */
    public void push(String val, String regularId,String problemId) {
        template.opsForList().leftPush(QUEUE_KEY + regularId+":"+problemId, val);
        template.expire(QUEUE_KEY + regularId, 60, TimeUnit.MINUTES);
    }

    /**
     * 向队列取出任务
     *
     * @return 返回取出的任务
     * @param regularId 普通用户ID
     * @param problemId 问题ID
     */
    public String pop(String regularId,String problemId) {
        String result = template.opsForList().rightPop(QUEUE_KEY+ regularId+":"+problemId);
        return result != null && !result.isEmpty() ? result : null;
    }

    /**
     * 删除redis队列
     * @param regularId 普通用户ID
     * @param problemId 问题ID
     */
    public void delQueue(String regularId,String problemId) {
        template.delete(QUEUE_KEY+ regularId+":"+problemId);
    }
}
